🐱 算神的小窝 🤓

使用 Node Exporter + Docker 化 Prometheus 监控 Linux 主机指标.md


CreationTime:7/15/2025 4:53:55 PM LastAccessTime:8/21/2025 3:44:03 PM


使用 Node Exporter + Docker 化 Prometheus 监控 Linux 主机指标

本教程将指导您通过 Node Exporter(部署在真实主机)和 Prometheus(Docker 容器)监控 Linux 主机的 CPU、内存、磁盘等核心指标。


一、架构说明

组件 部署位置 功能描述 端口 通信方向
Node Exporter Linux 主机 收集并暴露系统指标 9100 ← 提供指标
Prometheus Docker 容器 抓取、存储和查询指标数据 9090 → 抓取指标
Grafana (可选) Docker 容器 数据可视化 3000 → 查询 Prometheus

数据流向:

Linux 主机 (Node Exporter) → Prometheus (Docker) → Grafana (可视化)

端口关系图:

graph LR
    A[Linux 主机:9100] --> B[Prometheus:9090]
    B --> C[Grafana:3000]

二、操作步骤

1. 在 Linux 主机上部署 Node Exporter
# 下载最新版 Node Exporter (替换版本号)
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# 解压并安装
tar xvf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter

# 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Node Exporter
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
EOF

# 启动服务
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter

# 验证是否运行 (端口 9100)
curl http://localhost:9100/metrics
2. 准备 Prometheus 配置文件

创建目录存放配置:

mkdir -p ~/prometheus/config

编辑配置文件 ~/prometheus/config/prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: "node-exporter"
    static_configs:
      - targets: ["主机IP:9100"]  # 替换为您的Linux主机IP

重要:将 主机IP 替换为宿主机的实际 IP(可通过 ip a 查看),不要使用 localhost127.0.0.1

3. 使用 Docker 启动 Prometheus
docker run -d \
  --name=prometheus \
  -p 9090:9090 \
  -v ~/prometheus/config:/etc/prometheus \
  prom/prometheus
4. 验证服务
  • Node Exporter:浏览器访问 http://<主机IP>:9100/metrics

  • Prometheus:访问 http://<主机IP>:9090/targets

    在 Prometheus 的 Targets 页面应看到 node-exporter 状态为 UP


三、防火墙配置(若启用)

# 开放 Node Exporter 端口
sudo ufw allow 9100

# 开放 Prometheus 端口
sudo ufw allow 9090

四、常用监控指标说明

指标名称 含义
node_cpu_seconds_total CPU 使用时间
node_memory_MemFree_bytes 空闲内存
node_filesystem_avail_bytes 磁盘可用空间
node_load1 1分钟系统负载
node_network_receive_bytes 网络接收流量

五、可选:Grafana 可视化

  1. 启动 Grafana 容器:
    docker run -d --name=grafana -p 3000:3000 grafana/grafana
    
  2. 访问 http://<主机IP>:3000,默认账号/密码:admin/admin
  3. 添加数据源:选择 Prometheus,URL 填 http://主机IP:9090
  4. 导入 Node Exporter 仪表盘:

六、故障排查

  • Prometheus 显示 Target Down

    1. 检查主机 IP 是否正确(用 ip a 确认)
    2. 验证能否从 Docker 主机访问 Node Exporter:
      docker run --rm curlimages/curl http://<主机IP>:9100/metrics
      
    3. 检查防火墙规则
  • 指标无数据

    1. 在 Prometheus Web 输入 up{job="node-exporter"} 查看状态
    2. 检查 Node Exporter 日志:journalctl -u node_exporter -f

最终效果

image-20250715165106267 Prometheus Targets 页面显示 UP 状态

image-20250715165153678 Grafana 可视化主机指标

通过此方案,您已实现: ✅ 主机级指标实时采集
✅ 容器化 Prometheus 部署
✅ 集中式监控数据存储
✅ 可视化仪表盘(Grafana)

后续可扩展监控其他服务(MySQL/Nginx 等),只需在 Prometheus 中添加新的 Job 配置即可。

An unhandled error has occurred. Reload 🗙